cin>>x语句可以作为值吗?

来源:百度知道 编辑:UC知道 时间:2024/06/04 12:23:16
#include<iostream.h>
void main()
{
while(cin>>x) //为什么可以这样写?
n++,s+=x;
cout<<"n="<<n<<endl<<"sum="<<s<<endl;
}

标准I/O cout和cin中对operator void*和operator !进行了重载, 可以在控制语句中返回cout和cin的流状态:

比如:

int n;
cin >> n;

if(cin) // 如果流状态正常 调用operator void*
...;

if(!cin) // 如果出错 调用operator !
...;

如果你用cin读取一个整型量而输入的却是个字符, cin就会设置一个failbit来表示失效位, operator void* 在流状态正常时返回1, operator !返回0, 所以:

while(cin >> x)

其实和

while(cin && cin >> x)

等效

但由于cin和cout在执行完一次操作之后返回其本身, 所以可以简写为:

while(cin >> x)

这其中有2个过程, cin首先调用operator >> 来读入数据并返回cin, 然后由于其处在控制语句while中, 所以其operator void*被调用, 来测试流状态, 如果失败则跳出while.

failbit或eofbit都可以使cin和cout的流呈非正常状态, 所以你那个循环可以输入个字符、小数或者按ctrl + z(windows) ctrl + d(linux)插入一个eof标记来结束.

PS: 楼主那个不是死循环, 楼上写的才是真正的死循环.

是可以这样写的,而且这还是个死循环

有输入动作就执行一次,死循环。
<br>其实和
<br>while(1)
<br>{
<br>cin>>x
<br>}
<br>差不多。